package piece;

import echiquier.Echiquier.Ligne;
import piece.AbstractPiece.Couleur;
import piece.Piece.Dame;
import static echiquier.Echiquier.Ligne.*;

public class Piece {

    public static Dame Dame_Blanche;
    public static Roi Roi_Blanc;
    public static Cavalier Cavalier_Noir;
    public static Roi Roi_Noir;

    public Piece() {

        Dame_Blanche = new Dame(Couleur.blanc);
        Roi_Blanc = new Roi(Couleur.blanc);
        Roi_Noir = new Roi(Couleur.noir);
        Cavalier_Noir = new Cavalier(Couleur.noir);
    }

    public class Dame extends AbstractPiece {

        public Dame(Couleur couleur) {
            super(couleur);
            this.type = Type.Dame;
        }

        @Override
        public boolean verifie(Ligne ligne) {
            return ligne == nord | ligne == sud | ligne == est | ligne == ouest |
                   ligne == nord_est | ligne == sud_est | ligne == sud_ouest |
                   ligne == nord_ouest;
        }
    }

    public class Tour extends AbstractPiece {

        public Tour(Couleur couleur) {
            super(couleur);
            this.type = Type.Tour;
        }

        @Override
        public boolean verifie(Ligne ligne) {
            return ligne == nord | ligne == sud | ligne == est | ligne == ouest;
        }
    }

    public class Fou extends AbstractPiece {

        public Fou(Couleur couleur) {
            super(couleur);
            this.type = Type.Fou;
        }

        @Override
        public boolean verifie(Ligne ligne) {
            return ligne == nord_est | ligne == sud_est | ligne == sud_ouest |
                   ligne == nord_ouest;
        }
    }

    public class Roi extends AbstractPiece {

        public Roi(Couleur couleur) {
            super(couleur);
            this.type = Type.Roi;
        }

        @Override
        public boolean verifie(Ligne ligne) {
            return ligne == nord | ligne == sud | ligne == est | ligne == ouest |
                   ligne == nord_est | ligne == sud_est | ligne == sud_ouest |
                   ligne == nord_ouest;
        }
    }

    public class Cavalier extends AbstractPiece {

        public Cavalier(Couleur couleur) {
            super(couleur);
            type = Type.Cavalier;
        }

        @Override
        public boolean verifie(Ligne ligne) {
            return ligne == nord_nord_est | ligne == nord_est_est |
                   ligne == sud_est_est | ligne == sud_sud_est | ligne ==
                                                                 sud_sud_ouest |
                   ligne == sud_ouest_ouest | ligne == nord_ouest_ouest |
                   ligne == nord_nord_ouest;
        }
    }

    public class Pion extends AbstractPiece {

        public Pion(Couleur couleur) {
            super(couleur);
            this.type = Type.Pion;
        }

        @Override
        public boolean verifie(Ligne ligne) {
            return false;
        }
    }
}





















